/**
 * Copyright (C) 2009 All Rights Reserved
 * @author sebastian chang
 * @brief practice
 */

#include "auto_lock.h"

namespace trident {

auto_lock_t::auto_lock_t(lock_i* lock_, bool is_lock_) : _lock(lock_), _is_lock(is_lock_)
{
    if (_is_lock)
    {
        lock();
    }
}

auto_lock_t::~auto_lock_t()
{
    if (_is_lock)
    {
        unlock();
        _is_lock = false;
    }
}

int auto_lock_t::lock()
{
    int ret = -1;

    if (!_is_lock)
    {
        ret = _lock->lock();
        _is_lock = true;
    }

    return ret;
}

int auto_lock_t::unlock()
{
    int ret = -1;

    if (_is_lock)
    {
        ret = _lock->unlock();
        _is_lock = false;
    }

    return ret;
}

} // namespace trident

